#ifndef ZLBASE_DEVICE_DEVICEDEFINES_H_
#define ZLBASE_DEVICE_DEVICEDEFINES_H_

#include <cstdint>

namespace zl
{
namespace zlbase
{
/// \brief 加热器选项
typedef struct HeaterOption
{
    int32_t temperature_lower_limit;  ///< 温度下限值
    int32_t temperature_upper_limit;  ///< 温度上限值
    int32_t temperature_env;          ///< 当前环境温度
    uint8_t status;                   ///< 加热器的工作状态（0x01：关闭状态，0x00：工作状态）
} HeaterOption;

/// \brief 温控板状态数据
typedef struct TcbDeviceStatus
{
    /// 独立格口冷藏柜温控板通讯协议V4.0.0.0 中定义
    struct ICR
    {
        uint8_t left_defrost_heater_status;   ///< 表示左列除霜发热丝的状态，（0x00:表示除霜发热丝打开，0x01表示除霜发热丝关闭）
        uint8_t right_defrost_heater_status;  ///< 表示右列除霜发热丝的状态，（0x00:表示除霜发热丝打开，0x01表示除霜发热丝关闭）
        uint8_t box1_evaporator_fan_status;   ///< 蒸发器风扇的状态 (0x00表示蒸发器风扇打开，0x01表示蒸发器风扇关闭)
        uint8_t box2_evaporator_fan_status;   ///< 蒸发器风扇的状态 (0x00表示蒸发器风扇打开，0x01表示蒸发器风扇关闭)
        uint8_t box3_evaporator_fan_status;   ///< 蒸发器风扇的状态 (0x00表示蒸发器风扇打开，0x01表示蒸发器风扇关闭)
        uint8_t box4_evaporator_fan_status;   ///< 蒸发器风扇的状态 (0x00表示蒸发器风扇打开，0x01表示蒸发器风扇关闭)
        uint8_t box5_evaporator_fan_status;   ///< 蒸发器风扇的状态 (0x00表示蒸发器风扇打开，0x01表示蒸发器风扇关闭)
        uint8_t box6_evaporator_fan_status;   ///< 蒸发器风扇的状态 (0x00表示蒸发器风扇打开，0x01表示蒸发器风扇关闭)
        uint8_t box7_evaporator_fan_status;   ///< 蒸发器风扇的状态 (0x00表示蒸发器风扇打开，0x01表示蒸发器风扇关闭)
        uint8_t box8_evaporator_fan_status;   ///< 蒸发器风扇的状态 (0x00表示蒸发器风扇打开，0x01表示蒸发器风扇关闭)
        uint8_t box9_evaporator_fan_status;   ///< 蒸发器风扇的状态 (0x00表示蒸发器风扇打开，0x01表示蒸发器风扇关闭)
        uint8_t box10_evaporator_fan_status;  ///< 蒸发器风扇的状态 (0x00表示蒸发器风扇打开，0x01表示蒸发器风扇关闭)
        uint8_t box11_evaporator_fan_status;  ///< 蒸发器风扇的状态 (0x00表示蒸发器风扇打开，0x01表示蒸发器风扇关闭)
        uint8_t box12_evaporator_fan_status;  ///< 蒸发器风扇的状态 (0x00表示蒸发器风扇打开，0x01表示蒸发器风扇关闭)
        uint8_t voltage_status;               ///< 代表电压状态  0x00 表示电压正常，0x01表示欠压，0x10表示过压
        uint8_t left_compressor_status;       ///< 左侧压缩机状态，0x00正常工作，0x01关闭
        uint8_t right_compressor_status;      ///< 右侧压缩机状态，0x00正常工作，0x01关闭
        uint8_t electricity_status;           ///< 电流状态状态，0x00表示电流正常，0x01表示过流
    } icr;

    /// 共风道冷藏柜温控板通信协议
    struct SDR
    {
        uint8_t defrost_status;         ///< 表示除霜发热丝的状态，0x00表示除霜发热丝打开，0x01表示除霜发热丝关闭。
        uint8_t evaporator_fan_status;  ///< 表示蒸发器风扇的状态，0x00表示蒸发器风扇打开，0x01表示蒸发器风扇关闭
        uint8_t voltage_status;         ///< 代表电压状态  00表示电压正常，01表示欠压，10表示过压
        uint8_t compressor_status;      ///< 代表压缩机状态，若该位为0表示压缩机正常工作，该位为1表示压缩机关闭
        uint8_t electricity_status;     ///< 代表电流状态状态，若该位为0表示电流正常，该位为1表示过流
    } sdr;

    int32_t type;  ///< 0x00 表示ICR设备，0x01表示SDR设备状态
} TcbDeviceStatus;

/// \brief TODO onmi监控版查询空调状态
typedef struct OmniAirConditionStatus
{
    /*
             * DONE
             * Data_A：
             * Data_A.0：内风机1运行标志，为1表示运行
             * Data_A.1：内风机2运行标志, 为1表示运行
             * Data_A.2：外风机1运行标志, 为1表示运行
             * Data_A.3：外风机2运行标志, 为1表示运行
             * Data_A.4：外风机3运行标志, 为1表示运行
             * Data_A.5：排氢风机运行标志, 为1表示运行
             * Data_A.6：加热开启标志,     为1表示加热开启
             * Data_A.7：制冷开启标志，    为1表示制冷开启
             * Data_B：
             * Data_B.0：报警继电器吸合标志  为1表示有报警
             * Data_B.1: 系统运行或停机标志   为1表示运行
             * */
    uint8_t inner_stan1_status;
    uint8_t inner_stan2_status;
    uint8_t out_stan1_status;
    uint8_t out_stan2_status;
    uint8_t out_stan3_status;
    uint8_t hydrogen_stan_status;
    uint8_t heat_switch_status;
    uint8_t cold_switch_status;
    uint8_t alarm_relay_add_off_status;
    uint8_t system_run_and_stop_status;
} OmniAirConditionStatus;

/// \brief TODO 空调状态
///
/// (英维克新空调的指令)
/// 设备工作状态、室内风机状态、室外风机状态、压缩机状态，水泵状态定义：
/// 0X01  待机
/// 0X02  运行（运行且无故障）
/// 0X03  故障（有故障）
typedef struct AirConditioningStatus
{
    unsigned char device_status;          ///< 设备状态
    unsigned char fan_of_indoor_status;   ///< 室内风机状态
    unsigned char fan_of_outdoor_status;  ///< 室外风机状态
    unsigned char compressor_status;      ///< 压缩机状态
    int32_t wind_temperature;             ///< 柜内回风温度
    int32_t condenser_temperature;        ///< 冷凝器温度
    int32_t evaporator_temperature;       ///< 蒸发器温度
    int32_t inner_fan_speed;              ///< 内风机转速
    int32_t out_fan_speed;                ///< 外风机转速
} AirConditioningStatus;

/// \brief TODO 空调参数
typedef struct AirConditioningOption
{
    // DATA1...DATA8空调返回的相关参数
    uint8_t air_para[8];
} AirConditioningOption;

}  // namespace zlbase
}  // namespace zl

#endif  // ZLBASE_DEVICE_DEVICEDEFINES_H_